package com.deyuanyun.pic.ctrl.service;


import java.util.List;

import com.deyuanyun.pic.ctrl.controller.dto.ExinspOclpointQueryVO;
import com.deyuanyun.pic.ctrl.controller.dto.ExinspOclpointDTO;
import com.deyuanyun.pic.ctrl.controller.dto.RepairTaskDTO;
import com.deyuanyun.pic.ctrl.controller.dto.RepairTaskQueryVO;
import com.deyuanyun.pic.ctrl.domain.CtrlRepairTask;
import com.deyuanyun.pic.ctrl.enumeration.DefectStateEnum;
import com.deyuanyun.pic.ctrl.enumeration.RepairStateEnum;
import com.deyuanyun.pic.ctrl.enumeration.RepairTaskStatedEnum;
import com.deyuanyun.pic.pbf.domain.RepairTask;

/**
 * 维修任务Service
 *  
 * @author ChenKui
 * @date 2016-06-20
 */
public interface CoatRepairTaskService {
    
    
    /**
     * 查询维修任务列表
     * 
     * @param repairTaskVO
     * @return
     */
    List<RepairTaskDTO> queryRepairTaskList(RepairTaskQueryVO repairTaskVO);
    
    
    /**
     * 根据维修任务查询缺陷点
     * 
     * @param repairTaskId
     * @return
     */
    List<ExinspOclpointDTO> queryDefectInfoList(String[] repairTaskId);
    
    
    /**
     * 根据维修任务和指定修复状态，查询缺陷点。
     * 
     * @param repairTaskId 必传字段
     * @param repairState
     * @return
     */
    List<ExinspOclpointDTO> queryDefectInfoList(String[] repairTaskId,RepairStateEnum[] repairStateds);
    
    
    
    
    /**
     * 创建或者修改维修任务
     *  repairTask.id有值为update，否则为create。
     * 
     * @param RecodeTask 维修任务主表
     * @param repairTaskWorkload 维修任务工作量，create或者update下都不必传递ID和任务编号字段。
     * @param defectInfoIds 维修任务下包含哪些缺陷点
     */
    void createOrUpdate(CtrlRepairTask repairTask, String[] defectInfoIds);
    
    
    /**
     * 修改维修任务状态
     *  如：发布。
     * 基于未来事务拓展的考虑，调用的是RepairTaskService.updateByPrimaryKeySelective来实现的update
     * 
     * @param rtIds 维修任务编号
     * @param dataState 要改为的状态
     */
    int updateDataStated(String[] rtIds,DefectStateEnum dataStated);
    

    /**
     * 修改维修任务的维修状态
     *  如：关闭。
     * 基于未来事务拓展的考虑，调用的是RepairTaskService.updateByPrimaryKeySelective来实现的update
     * 
     * @param rtIds 维修任务编号
     * @param repairState 要改为的状态
     */
    int updateRepairTaskStated(String[] rtIds,RepairTaskStatedEnum repairTaskStated);
    
    
    /**
     * 修改维修任务为删除状态，同时将所包含的缺陷点全部回归初始情况。
     *  即delete=1标记删除
     * 基于未来事务拓展的考虑，调用的是RepairTaskService.updateByPrimaryKeySelective来实现的update
     * 
     * @param rtIds 要删除的维修任务编号
     */
    int updateToDelete(String[] rtIds);
    
    /**
     * 根据维修任务编号，查询维修任务的工作量。
     *      此方法在业务上并没有什么调用的地方。
     * 
     * @param repairTaskId
     * @return
     
    RepairTaskWorkload queryRepairTaskWorkload(String repairTaskId);
    */
    
    /**
     * 根据管道名称和检测管段名称查询
     * 有缓存，按理说这个方法不应当在此处实现，但是为了加缓存，并且以前的代码实在看不下去。
     * 
     * @param pipeName
     * @param inspSegmentName
     * @return
     */
    //Map<String,Object> queryInspSegmentByName(String pipeName,String inspSegmentName);
    
    /**
     * 根据缺陷点统一编号去查询缺陷点。
     * 
     * @param customNumber
     * @return
     
    ExinspOclpointDTO queryDefectInfoByDefectInfoCode(String defectInfoCode);
    */

    /**
     * 根据自定义编号去查询缺陷点。
     * 
     * @param customNumber
     * @return
     */
    ExinspOclpointDTO queryDefectInfoByCustomNumber(String customNumber);
    

    /**
     * 根据自定义编号去查询缺陷点。
     * 
     * @param customNumber
     * @return
     */
    List<ExinspOclpointDTO> queryDefectInfoByCustomNumber(String[] customNumbers);
    

    /**
     * 根据缺陷点编号去查询缺陷点
     * @param defectInfoId
     * @return
     */
    ExinspOclpointDTO queryExinspOclpointDTO(String defectInfoId);
    

    /**
     * 查询缺陷点相关信息
     * 
     * @param defectSuggest
     * @return
     */
    List<ExinspOclpointDTO> queryExinspOclpoint(ExinspOclpointQueryVO defectSuggest);


    CtrlRepairTask selectByPrimaryKey(String id);

    int deleteByPrimaryKey(String id);

    int updateByPrimaryKeySelective(CtrlRepairTask record);

    int updateByPrimaryKey(CtrlRepairTask record);

    int insert(CtrlRepairTask record);
}